//
// Created by Tiany on 2021/6/18.
//

#ifndef SHUJUJIEGOU_LINKLIST_H
#define SHUJUJIEGOU_LINKLIST_H

//DataType结构
struct DataType {
    int n;
};

//单链表结构
struct Node;
typedef struct Node *PNode;
struct Node {
    struct DataType info;
    PNode link;
};
typedef struct Node *LinkList;

//头结点linkList不包含数据，仅作为头指针指向单链表
//创建空链表
LinkList createNullList_link(void);

//将数据写入单链表
LinkList writeList_link(LinkList linkList, struct DataType x[], int length);

//判断单链表是否为空
int isNullList_link(LinkList linkList);

//在单链表中求某元素的存储位置
PNode locate_link(LinkList linkList, struct DataType x);

//查找单链表中元素x的个数
int countV_link(LinkList linkList, struct DataType x);

//单链表的p结点后插入
int insertPost_link(LinkList linkList, PNode p, struct DataType x);

//单链表的p结点前插入
int insertPre_link(LinkList linkList, PNode p, struct DataType x);

//在单链表中求p结点的前驱结点
PNode locatePre_link(LinkList linkList, PNode p);

//在单链表中删除元素x
int deleteV_link(LinkList linkList, struct DataType x);

//在单链表中删除结点p
int deleteP_link(LinkList linkList, PNode p);

//去除单链表中重复的元素
int delete_duplicate(LinkList linkList);

//求单链表的长度
int length_link(LinkList linkList);

//读取并打印单链表
void readList_link(LinkList linkList);

#endif //SHUJUJIEGOU_LINKLIST_H
